package pe.com.cruzdelsur.dao;

import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;

import org.hibernate.Query;
import org.hibernate.SessionFactory;

import pe.com.cruzdelsur.dominio.Plantilla;


public class PlantillaDaoImpl implements PlantillaDao {

	private SessionFactory sessionFactory;

	public SessionFactory getSessionFactory() {
		return sessionFactory;
	}

	public void setSessionFactory(SessionFactory sessionFactory) {
		this.sessionFactory = sessionFactory;
	}

	@Override
	public void insertar(Plantilla plantilla) {
		getSessionFactory().getCurrentSession().save(plantilla);

	}

	public void actualizar(Plantilla plantilla) {
		getSessionFactory().getCurrentSession().update(plantilla);

	}

	public void eliminar(Plantilla plantilla) {
		getSessionFactory().getCurrentSession().delete(plantilla);

	}

	public Plantilla obtener(int id) {
		List list = getSessionFactory().getCurrentSession()
				.createQuery("from Plantilla where estado='1' and id=?").setParameter(0, id)
				.list();
		return (Plantilla) list.get(0);
	}

	@Override
	public List<Plantilla> buscarPorDescripcionLike(String descripcion) {
		List list = getSessionFactory().getCurrentSession()
				.createQuery("from Plantilla  where estado='1' and upper(descripcion) LIKE :descripcion").setParameter("descripcion", "%" + descripcion.toString().toUpperCase() + "%")
				.list();
		return list;
	}
	
	public List<Plantilla> listar() {
		List list = getSessionFactory().getCurrentSession()
				.createQuery("from Plantilla where estado='1'").list();
		return list;
	}

	public Boolean validarNombrePlantilla(String descripcion,int plantillaId) {
		Boolean resultado=false;
		Query query = getSessionFactory().getCurrentSession()
				.createQuery("from Plantilla where descripcion=:descripcion and NOT plantillaId=:plantillaId ");
        query.setParameter("descripcion", descripcion);
        query.setParameter("plantillaId", plantillaId);
        
		if(query.list().isEmpty()){
			resultado=false;
		}else{
			resultado=true;
		}
		return resultado;
	}

	@Override
	public List<Plantilla> buscarPorDescripcionIgual(String descripcion) {
		List list = getSessionFactory().getCurrentSession()
				.createQuery("from Plantilla  where estado='1' and upper(descripcion) = :descripcion").setParameter("descripcion", descripcion.toString().toUpperCase())
				.list();
		return list;
	}



}
